<!DOCTYPE html><html lang="en" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>Pico 2 锁板问题原因分析与解决方案 | 风起微光里</title><meta name="author" content="MT"><meta name="copyright" content="MT"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="【Pico 2 锁板问题原因分析与解决方案】在使用幸狐的 Pico 2（RP2350A）进行开发时，有部分用户可能遇到「锁板」现象 —— 即板子重启后无法再通过 Thonny 或其他 IDE 与其通信，导致无法上传新的程序。本文将介绍该问题的常见原因、复现方式及解决方案。">
<meta property="og:type" content="article">
<meta property="og:title" content="Pico 2 锁板问题原因分析与解决方案">
<meta property="og:url" content="https://forgetl.github.io/2025/08/05/About-me/index.html">
<meta property="og:site_name" content="风起微光里">
<meta property="og:description" content="【Pico 2 锁板问题原因分析与解决方案】在使用幸狐的 Pico 2（RP2350A）进行开发时，有部分用户可能遇到「锁板」现象 —— 即板子重启后无法再通过 Thonny 或其他 IDE 与其通信，导致无法上传新的程序。本文将介绍该问题的常见原因、复现方式及解决方案。">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://forgetl.github.io/images/myavator.jpg">
<meta property="article:published_time" content="2025-08-05T12:32:30.000Z">
<meta property="article:modified_time" content="2025-08-06T05:11:31.409Z">
<meta property="article:author" content="MT">
<meta property="article:tag" content="Pico2">
<meta property="article:tag" content="单片机">
<meta property="article:tag" content="新手踩坑">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://forgetl.github.io/images/myavator.jpg"><script type="application/ld+json">{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Pico 2 锁板问题原因分析与解决方案",
  "url": "https://forgetl.github.io/2025/08/05/About-me/",
  "image": "https://forgetl.github.io/images/myavator.jpg",
  "datePublished": "2025-08-05T12:32:30.000Z",
  "dateModified": "2025-08-06T05:11:31.409Z",
  "author": [
    {
      "@type": "Person",
      "name": "MT",
      "url": "https://forgetl.github.io"
    }
  ]
}</script><link rel="shortcut icon" href="/images/favicon.ico"><link rel="canonical" href="https://forgetl.github.io/2025/08/05/About-me/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css"><script>
    (() => {
      
    const saveToLocal = {
      set: (key, value, ttl) => {
        if (!ttl) return
        const expiry = Date.now() + ttl * 86400000
        localStorage.setItem(key, JSON.stringify({ value, expiry }))
      },
      get: key => {
        const itemStr = localStorage.getItem(key)
        if (!itemStr) return undefined
        const { value, expiry } = JSON.parse(itemStr)
        if (Date.now() > expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return value
      }
    }

    window.btf = {
      saveToLocal,
      getScript: (url, attr = {}) => new Promise((resolve, reject) => {
        const script = document.createElement('script')
        script.src = url
        script.async = true
        Object.entries(attr).forEach(([key, val]) => script.setAttribute(key, val))
        script.onload = script.onreadystatechange = () => {
          if (!script.readyState || /loaded|complete/.test(script.readyState)) resolve()
        }
        script.onerror = reject
        document.head.appendChild(script)
      }),
      getCSS: (url, id) => new Promise((resolve, reject) => {
        const link = document.createElement('link')
        link.rel = 'stylesheet'
        link.href = url
        if (id) link.id = id
        link.onload = link.onreadystatechange = () => {
          if (!link.readyState || /loaded|complete/.test(link.readyState)) resolve()
        }
        link.onerror = reject
        document.head.appendChild(link)
      }),
      addGlobalFn: (key, fn, name = false, parent = window) => {
        if (!false && key.startsWith('pjax')) return
        const globalFn = parent.globalFn || {}
        globalFn[key] = globalFn[key] || {}
        globalFn[key][name || Object.keys(globalFn[key]).length] = fn
        parent.globalFn = globalFn
      }
    }
  
      
      const activateDarkMode = () => {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      const activateLightMode = () => {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }

      btf.activateDarkMode = activateDarkMode
      btf.activateLightMode = activateLightMode

      const theme = saveToLocal.get('theme')
    
          theme === 'dark' ? activateDarkMode() : theme === 'light' ? activateLightMode() : null
        
      
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        document.documentElement.classList.toggle('hide-aside', asideStatus === 'hide')
      }
    
      
    const detectApple = () => {
      if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {
        document.documentElement.classList.add('apple')
      }
    }
    detectApple()
  
    })()
  </script><script>const GLOBAL_CONFIG = {
  root: '/',
  algolia: undefined,
  localSearch: undefined,
  translate: undefined,
  highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false,"highlightFullpage":false,"highlightMacStyle":false},
  copy: {
    success: 'Copy Successful',
    error: 'Copy Failed',
    noSupport: 'Browser Not Supported'
  },
  relativeDate: {
    homepage: false,
    post: false
  },
  runtime: '',
  dateSuffix: {
    just: 'Just now',
    min: 'minutes ago',
    hour: 'hours ago',
    day: 'days ago',
    month: 'months ago'
  },
  copyright: undefined,
  lightbox: 'null',
  Snackbar: undefined,
  infinitegrid: {
    js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js',
    buttonText: 'Load More'
  },
  isPhotoFigcaption: false,
  islazyloadPlugin: false,
  isAnchor: false,
  percent: {
    toc: true,
    rightside: false,
  },
  autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
  title: 'Pico 2 锁板问题原因分析与解决方案',
  isHighlightShrink: false,
  isToc: true,
  pageType: 'post'
}</script><meta name="generator" content="Hexo 7.3.0"></head><body><div id="web_bg" style="background: linear-gradient(to right, #FFD1CA, #AFF2FA);"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img text-center"><img src="/images/myavator.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data text-center"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">0</div></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></div><div class="menus_item"><a class="site-page" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg fixed" id="page-header" style="background-image: url(/images/273723beafa13558594a61d4625dbed8e19d9d5c.jpg);"><nav id="nav"><span id="blog-info"><a class="nav-site-title" href="/"><img class="site-icon" src="/images/titleimg.jpg" alt="Logo"><span class="site-name">风起微光里</span></a><a class="nav-page-title" href="/"><span class="site-name">Pico 2 锁板问题原因分析与解决方案</span><span class="site-name"><i class="fa-solid fa-circle-arrow-left"></i><span>  Back to Home</span></span></a></span><div id="menus"><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> Home</span></a></div><div class="menus_item"><a class="site-page" href="/music/"><i class="fa-fw fas fa-music"></i><span> Music</span></a></div><div class="menus_item"><a class="site-page" href="/movies/"><i class="fa-fw fas fa-video"></i><span> Movie</span></a></div></div><div id="toggle-menu"><span class="site-page"><i class="fas fa-bars fa-fw"></i></span></div></div></nav><div id="post-info"><h1 class="post-title">Pico 2 锁板问题原因分析与解决方案</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">Created</span><time class="post-meta-date-created" datetime="2025-08-05T12:32:30.000Z" title="Created 2025-08-05 20:32:30">2025-08-05</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">Updated</span><time class="post-meta-date-updated" datetime="2025-08-06T05:11:31.409Z" title="Updated 2025-08-06 13:11:31">2025-08-06</time></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-pv-cv" id="" data-flag-title=""><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">Post Views:</span><span id="busuanzi_value_page_pv"><i class="fa-solid fa-spinner fa-spin"></i></span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="container post-content" id="article-container"><h1 id="【Pico-2-锁板问题原因分析与解决方案】"><a href="#【Pico-2-锁板问题原因分析与解决方案】" class="headerlink" title="【Pico 2 锁板问题原因分析与解决方案】"></a>【Pico 2 锁板问题原因分析与解决方案】</h1><p>在使用幸狐的 Pico 2（RP2350A）进行开发时，有部分用户可能遇到「锁板」现象 —— 即板子重启后无法再通过 Thonny 或其他 IDE 与其通信，导致无法上传新的程序。本文将介绍该问题的常见原因、复现方式及解决方案。</p>
<hr>
<span id="more"></span>
<h2 id="一、问题复现与根本原因"><a href="#一、问题复现与根本原因" class="headerlink" title="一、问题复现与根本原因"></a>一、问题复现与根本原因</h2><h3 id="1-与线程相关的程序会导致通信失败"><a href="#1-与线程相关的程序会导致通信失败" class="headerlink" title="1. 与线程相关的程序会导致通信失败"></a>1. 与线程相关的程序会导致通信失败</h3><p>如果你使用 <code>micropython</code> 的 <code>_thread</code> 模块来开启新线程，比如官方示例中的<a target="_blank" rel="noopener" href="https://github.com/raspberrypi/pico-micropython-examples/blob/master/multicore/multicore.py">multicore</a>：</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time, _thread, machine</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">task</span>(<span class="params">n, delay</span>):</span><br><span class="line">    led = machine.Pin(<span class="string">&quot;LED&quot;</span>, machine.Pin.OUT)</span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(n):</span><br><span class="line">        led.high()</span><br><span class="line">        time.sleep(delay)</span><br><span class="line">        led.low()</span><br><span class="line">        time.sleep(delay)</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&#x27;done&#x27;</span>)</span><br><span class="line"></span><br><span class="line">_thread.start_new_thread(task, (<span class="number">10</span>, <span class="number">0.5</span>))</span><br></pre></td></tr></table></figure>

<p>这类程序在运行期间可能会阻塞串口通信，从而导致 Thonny 与开发板通信失败。</p>
<h3 id="2-放在-main-py-中问题会永久化"><a href="#2-放在-main-py-中问题会永久化" class="headerlink" title="2. 放在 main.py 中问题会永久化"></a>2. 放在 <code>main.py</code> 中问题会永久化</h3><p>在 MicroPython 中，如果你将上述线程代码写入 <code>main.py</code>，那么每次板子重启都会自动执行 <code>main.py</code>，从而立刻触发死循环或线程异常， <strong>即使重启也无法中断执行逻辑</strong> ，Thonny 将彻底无法重新连接到板子，导致「锁板」。</p>
<hr>
<h2 id="二、解决方案：刷入-flash-nuke-uf2-文件清除-Flash"><a href="#二、解决方案：刷入-flash-nuke-uf2-文件清除-Flash" class="headerlink" title="二、解决方案：刷入 flash_nuke.uf2 文件清除 Flash"></a>二、解决方案：刷入 <code>flash_nuke.uf2</code> 文件清除 Flash</h2><h3 id="步骤如下："><a href="#步骤如下：" class="headerlink" title="步骤如下："></a>步骤如下：</h3><ol>
<li><p><strong>按住 BOOTSEL 键的同时插入 USB 连接线</strong></p>
<p>这样板子将进入“USB Mass Storage”模式（类似U盘），不会自动执行 flash 中的 <code>main.py</code>，从而避免再次进入死循环。</p>
</li>
<li><p><strong>将新版的 <code>flash_nuke.uf2</code> 文件拖入该磁盘</strong></p>
<p>你需要确保使用的是适用于 RP2350 的<strong>新版</strong> <code>flash_nuke.uf2</code> 文件，旧版的 nuke 文件对新架构（如 RP2350）无效，拖入磁盘中也不会自动执行。<br>官方链接：<a target="_blank" rel="noopener" href="https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#resetting-flash-memory">flash_nuke.uf2</a></p>
</li>
<li><p><strong>等待刷写完成后板子会自动重启，Flash 被清空</strong></p>
<p>此时你可以使用 Thonny 正常连接板子，重新拖入<a target="_blank" rel="noopener" href="https://wiki.luckfox.com/zh/Pico2/getting-start#micropython-%E7%B3%BB%E5%88%97">MicroPython固件</a>，然后重新上传你的 MicroPython 程序。</p>
</li>
</ol>
<hr>
<h2 id="三、预防建议"><a href="#三、预防建议" class="headerlink" title="三、预防建议"></a>三、预防建议</h2><ul>
<li><strong>调试阶段避免直接写入 <code>main.py</code></strong> ，建议先在 Thonny 中交互式运行；</li>
<li><strong>线程代码务必确保有超时机制</strong> ，避免死循环；</li>
<li><strong>提前备份重要脚本代码</strong> ，以免 nuke 操作导致文件丢失。</li>
</ul>
<hr>
<h2 id="四、总结"><a href="#四、总结" class="headerlink" title="四、总结"></a>四、总结</h2><p>Pico 2 的锁板现象主要由启动后自动执行的线程代码导致，与其芯片双核架构和 Micropython 的线程机制有关。使用 <code>flash_nuke.uf2</code> 是目前最有效的解锁手段，开发者应在使用多线程等功能时更加谨慎，避免程序失控而导致的通信中断。</p>
</article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta"><i class="fas fa-circle-user fa-fw"></i>Author: </span><span class="post-copyright-info"><a href="https://forgetl.github.io">MT</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta"><i class="fas fa-square-arrow-up-right fa-fw"></i>Link: </span><span class="post-copyright-info"><a href="https://forgetl.github.io/2025/08/05/About-me/">https://forgetl.github.io/2025/08/05/About-me/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta"><i class="fas fa-circle-exclamation fa-fw"></i>Copyright Notice: </span><span class="post-copyright-info">All articles on this blog are licensed under <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a> unless otherwise stated.</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/Pico2/">Pico2</a><a class="post-meta__tags" href="/tags/%E5%8D%95%E7%89%87%E6%9C%BA/">单片机</a><a class="post-meta__tags" href="/tags/%E6%96%B0%E6%89%8B%E8%B8%A9%E5%9D%91/">新手踩坑</a></div><div class="post-share"><div class="social-share" data-image="/images/myavator.jpg" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><a class="pagination-related full-width" href="/2025/08/05/hello-world/" title="Hello World"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-right"><div class="info-1"><div class="info-item-1">Next</div><div class="info-item-2">Hello World</div></div><div class="info-2"><div class="info-item-1">Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new &quot;My New Post&quot;  More info: Writing Run server1$ hexo server  More info: Server Generate static files1$ hexo generate  More info: Generating Deploy to remote sites1$ hexo deploy  More info: Deployment </div></div></div></a></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="/images/myavator.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info-name">MT</div><div class="author-info-description"></div><div class="site-data"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">2</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">3</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/forgetl"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons"><a class="social-icon" href="https://github.com/forgetl" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>Announcement</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>Contents</span><span class="toc-percentage"></span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#%E3%80%90Pico-2-%E9%94%81%E6%9D%BF%E9%97%AE%E9%A2%98%E5%8E%9F%E5%9B%A0%E5%88%86%E6%9E%90%E4%B8%8E%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E3%80%91"><span class="toc-number">1.</span> <span class="toc-text">【Pico 2 锁板问题原因分析与解决方案】</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%80%E3%80%81%E9%97%AE%E9%A2%98%E5%A4%8D%E7%8E%B0%E4%B8%8E%E6%A0%B9%E6%9C%AC%E5%8E%9F%E5%9B%A0"><span class="toc-number">1.1.</span> <span class="toc-text">一、问题复现与根本原因</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-%E4%B8%8E%E7%BA%BF%E7%A8%8B%E7%9B%B8%E5%85%B3%E7%9A%84%E7%A8%8B%E5%BA%8F%E4%BC%9A%E5%AF%BC%E8%87%B4%E9%80%9A%E4%BF%A1%E5%A4%B1%E8%B4%A5"><span class="toc-number">1.1.1.</span> <span class="toc-text">1. 与线程相关的程序会导致通信失败</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-%E6%94%BE%E5%9C%A8-main-py-%E4%B8%AD%E9%97%AE%E9%A2%98%E4%BC%9A%E6%B0%B8%E4%B9%85%E5%8C%96"><span class="toc-number">1.1.2.</span> <span class="toc-text">2. 放在 main.py 中问题会永久化</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BA%8C%E3%80%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9A%E5%88%B7%E5%85%A5-flash-nuke-uf2-%E6%96%87%E4%BB%B6%E6%B8%85%E9%99%A4-Flash"><span class="toc-number">1.2.</span> <span class="toc-text">二、解决方案：刷入 flash_nuke.uf2 文件清除 Flash</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%AD%A5%E9%AA%A4%E5%A6%82%E4%B8%8B%EF%BC%9A"><span class="toc-number">1.2.1.</span> <span class="toc-text">步骤如下：</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%89%E3%80%81%E9%A2%84%E9%98%B2%E5%BB%BA%E8%AE%AE"><span class="toc-number">1.3.</span> <span class="toc-text">三、预防建议</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%9B%9B%E3%80%81%E6%80%BB%E7%BB%93"><span class="toc-number">1.4.</span> <span class="toc-text">四、总结</span></a></li></ol></li></ol></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>Recent Posts</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/08/05/About-me/" title="Pico 2 锁板问题原因分析与解决方案">Pico 2 锁板问题原因分析与解决方案</a><time datetime="2025-08-05T12:32:30.000Z" title="Created 2025-08-05 20:32:30">2025-08-05</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/08/05/hello-world/" title="Hello World">Hello World</a><time datetime="2025-08-05T04:45:09.124Z" title="Created 2025-08-05 12:45:09">2025-08-05</time></div></div></div></div></div></div></main><footer id="footer" style="background: linear-gradient(to right, #23D4AC, #23B3CA);"><div class="footer-other"><div class="footer-copyright"><span class="copyright">&copy;&nbsp;2025 By MT</span><span class="framework-info"><span>Framework </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo 7.3.0</a><span class="footer-separator">|</span><span>Theme </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly 5.4.3</a></span></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="Reading Mode"><i class="fas fa-book-open"></i></button><button id="darkmode" type="button" title="Toggle Between Light and Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle Between Single-column and Double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="Settings"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="Table of Contents"><i class="fas fa-list-ul"></i></button><button id="go-up" type="button" title="Back to Top"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>